Over the past sixty years, programming languages have evolved from a handful of low-level and mid-level languages, such as Assembler Languages, COBOL and Fortran, to the hundreds of high-level languages in use today.
Programming languages—which may be referred to herein as source languages—are traditionally expressed in source code. Source code is traditionally expressed in lines of ASCII characters (English alphabet, numbers 0-9, and symbols). Machines, however, execute target languages, which are traditionally expressed as object code, which is itself in binary form (zeros and ones). Typically, a compilation process is needed to “translate” source language into object code, the language the machine understands. The compiler plays a role similar to a human language interpreter as it “translates” one language into another, thereby acting as the “middleman” between the program and the processor on which the program is intended to execute. The compilation process may involve a series of complex processes, which may include syntactical analysis, preprocessing, parsing, semantic analysis, code generation and optimization.
During its first pass, the compiler demarcates and classifies each string of ASCII characters as a declaration or statement, analyzing syntax to assure that the program is correctly structured according to rules built into the compiler's tokenizer; a process commonly known as syntactic analysis, resulting in the creation of a symbol table composed of tokens.
Following syntactic analysis, the compiler typically makes subsequent passes on the symbol tables to generate object code, part of a process known as semantic analysis. Tokens are often the product of different or incompatible compilers, and as such are typically discarded after each use, along with the source code's original purpose (design intent).
One possible solution for permanently capturing the design intent of software would be to develop a programming language whose medium of expression graphically depicts program declarations and statements (syntax) and captures a program's meaning (semantics) in the form of reusable tokens. One possible embodiment for a reusable token may be a software component.
Over the past four decades, the software industry has attempted to create standardized software components used four fundamental approaches: object-oriented programming, multi-paradigm programming, graphical programming, and component-based development.
Object-oriented Programming (OOP)—OOP was developed at Xerox PARC in the 1970s as a way to create modular, reusable software for large-scale reuse. C++, Objective-C, Smalltalk, Java, C#, Perl, Python, Ruby and PHP are current examples of object-oriented programming languages. OOP provides a structure for programs, a framework for code libraries, and makes it easier to maintain and modify existing source code. From a modeling perspective, object classes support the encapsulation of data and methods, inheritance, and polymorphism.
Multi-paradigm Programming—A programming paradigm may best be described as a “style” or “way” of programming, typically dictating the design of a program's structures and behaviors. Common paradigms include object-orientation, imperative, declarative, functional, logic, and symbolic. As systems become more complex over time, it has become increasingly important for languages to support multiple programming styles.
Graphical Programming—Supplementing text with graphics significantly increases the amount of information that can be conveyed in a limited amount of space, hence the expression “a picture is worth a thousand words.” The World Wide Web's adoption of a graphical user interface (GUI) was instrumental to its meteoric rise in popularity. Surprisingly, software development may be the last bastion of computing to effectively exploit the power of visualization.
Component-based Development—Component-based Development (CBD) is a branch of software engineering that drives standards for component implementation, documentation and deployment. Examples of component models include Enterprise JavaBeans (EJB) model, Component Object Model (COM) model, .NET model and Common Object Request Broker Architecture (CORBA). Typically, CBD takes a reuse-based approach to defining, implementing, and composing systems from loosely coupled components.
With increasing levels of systems complexity—due in no small part to the introduction of the Internet of Things—the need is greater than ever to develop systems from standardized, reusable software components. The introduction of assembly line manufacturing of goods from standardized components ignited the American Industrial Revolution in the nineteenth century. By the same token, the introduction of assembly line manufacturing of digital goods from standardized software components may ignite a new Internet Revolution in the twenty-first century.